package routers

import (
	"PublicBenefitActivities/controllers"
	"PublicBenefitActivities/middleware"
	"PublicBenefitActivities/utils"

	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"gorm.io/gorm"
)

// SetupRouter 初始化路由配置并返回gin引擎实例。
// 参数:
//
//	db *gorm.DB: 数据库连接实例，用于控制器函数访问数据库。
//	logger *zap.Logger: 日志记录实例，用于记录中间件和控制器函数的日志信息。
//
// 返回值:
//
//	*gin.Engine: 配置好路由的gin引擎实例，用于启动HTTP服务器。
func SetupRouter(db *gorm.DB, logger *zap.Logger) *gin.Engine {
	// 创建一个新的gin引擎实例。
	r := gin.New()

	// 使用中间件来恢复从崩溃中恢复，确保服务的高可用性。
	r.Use(middleware.Recovery(logger))

	// 定义API组路由，所有API相关的路由都将以此为前缀。
	api := r.Group("/api")
	{
		// 定义用户相关的路由组。
		user := api.Group("/user")
		{
			// 获取所有用户信息的路由。
			user.GET("/getAllUsers", func(ctx *gin.Context) { controllers.GetUsers(ctx, db) })
		}
	}

	// 测试路由，返回简单的成功消息和字符串"hello world!"。
	r.GET("hello", func(ctx *gin.Context) { utils.Success(ctx, "hello world!") })

	// 微信小程序登陆服务端Api调用接口
	r.POST("/api/wxLogin", func(ctx *gin.Context) { controllers.WxLogin(ctx) })

	// 返回配置好的gin引擎实例。
	return r
}
